"""
    实现自动存取款机的存取模拟
    包含：
        1、登陆、退出
        2、查询余额
        3、余额
        4、存钱
        5、事先存储3个账户
"""
#声明全局变量
global Num
#定义一个个人银行账户信息表
banklist = [
    {'ID':6222022740001568996,'Money':120560230},
    {'ID':6224568932156874569,'Money':698523171},
    {'ID':6222565482213669451,'Money':213659361},
]
#定义一个银行卡信息输出函数
def Showlist(banklist):
    """
        银行卡信息输出
    """
    #如果银行卡列表不存在银行卡，提示用户不存在银行卡
    if len(banklist) == 0:
        print(" "*6,"您的银行账户不存在银行卡，请稍后再查！")
        return
    #使用format格式化输出表头，并且向左对齐
    print("|{0:<3}|{1:<25}|{2:<12}".format("Num","ID","Money/元"))
    #使用for...in...循环输出银行卡卡号以及余额，并且向左对齐
    for i in range(len(banklist)):
        print("|{0:<3}|{1:<25}|{2:<12}".format(i+1,banklist[i]["ID"],banklist[i]["Money"]))


#定义一个只输出银行卡号的函数
def ShowID(banklist):
    """
        银行卡卡号输出
    """
    if banklist == 0:       #如果银行卡列表不存在银行卡，提醒客服先办卡
        print(" "*10,"抱歉，您名下没有银行卡！请先办卡！！")
        return
    #采用format格式化输出表头，并且向左对齐
    print(" "*11,"|{0:<3}|{1:20}".format("Num","ID"))
    #使用for...in...循环以及format格式化输出银行卡卡号，并且向左对齐
    for i in range(len(banklist)):
        print(" "*11,"|{0:<3}|{1:20}".format(i+1,banklist[i]["ID"]))


#定义一个选择银行卡的函数
def NumOfBank(banklist):
    """
        选择银行卡
    """
    print(" "*13,"请选择您要操作的银行卡：")
    print(" "*3,"温馨提示：银行卡序号1，2，3分别对应0，1，2")
    global Num                               #调用全局变量
    Num = input("\n                      ")         #选择
    print("\n"," "*14,"您选择的银行卡账户为：\n")
    print(" "*16,banklist[int(Num)]["ID"])   #输出用户选择的银行卡卡号便于核对信息
    print("\n")

#定义ATM机取款机操作函数
def Key_input():
    """
        接收密码
        存款信息
        取款信息
        查询余额
        退出系统
    """
    global Money    #声明全局变量
    global Num      #调用全局变量
    a = banklist[int(Num)]["Money"] #定义局部变量并赋予初始值
    count = 0                       #密码输错三次将直接退出，初始错误密码输入0次
    while count<3:
        #键入密码，并且进行判断，初始化密码为123456
        KeyBorad=input("               密码默认123456：")
        print("\n\n")
        if KeyBorad == "123456":    #如果密码输入正确，则进入操作界面
            while True:             #采用while循环进行输出
                print("="*50,"\n")
                print(" {0:<13}{1:>30}".format("1.存款","3.查询余额"))
                print("\n\n"," "*15,"中国人民银行\n\n\n")
                print(" {0:<13}{1:>30}".format("2.取款","4.退出系统"))
                print("="*50,"\n")
                count =3
                #根据自己想要执行的操作，按照操作提示进行选择
                Cho = input("请根据序号选择你要执行的操作：\n\n")
                if  Cho =="1":                          #根据界面提示，输入1则进入存钱操作
                    print(" "*20,"存款\n")
                    print(" "*20,"SAVE\n")
                    print(" "*10,"请输入您要存入的金钱金额：")
                    Money = input("\n")
                    a += int(Money)         #调用局部变量并且进余额计算
                    print(" "*15,"恭喜您存钱成功：")

                    input("按回车键继续：")
                elif Cho =="2":             #根据界面提示，输入2进入取钱操作
                    print(" "*20,"取钱\n")
                    print(" "*19,"LAY Out\n")
                    print(" "*13,"请输入您要取出金钱数量：")
                    Money = input("\n")
                    if int(Money) > a:   #使用if语句进行判断银行卡中余额是否充足
                        print(" "*8,"抱歉，您的银行卡余额不足！！！")
                        break
                    else:
                        print(" "*15,"恭喜您取钱成功：")   #提示取钱成功
                    a -= int(Money)         #调用局部变量并且进余额计算
                    input("按回车键继续：")
                elif Cho =="3":             #根据界面提示，输入3则进入查询余额
                    print(" "*15,"查询余额\n")
                    print(" "*14,"GET BALANCE\n")
                    print(" "*10,"您的账户所剩余额为：")
                    print(" "*15,a,"元")         #调用局部变量进行输出银行卡余额
                    print(" "*50)
                    input("按回车键继续：")
                elif Cho =="4":             #根据界面提示，输入4将执行退出银行卡操作
                    print(" "*16,"退出系统\n")
                    print(" "*18,"EXIT\n")
                    break
                else:           #输入选项不存在可以重新选择
                    Cho=input("请重新选择您需要执行的操作：\n\n")
                    input("按回车键继续：")
        else:                   #如果密码输入错误，可以再输入，总次数不可超过3次
            print(" "*15," 您的密码输入错误!")
            print(" "*15,"请重新输入您的密码：")
            count += 1
            print(" "*15," 您还可以输入",3-count,"次\n\n") #提示用户还可以输入密码的次数

#初始界面
print("="*50,"\n")
print(" "*15,"欢迎使用自动取款机")
print("\n\n")
print(" "*13,"您名下的银行卡账户如下：\n")
print("="*50)
ShowID(banklist)                    #调用银行卡号输出函数
print("")
NumOfBank(banklist)                 #调用选择银行卡的函数
print(" "*15," 请输入银行卡密码")    #提示用户输入银行卡密码
print("\n\n")
Key_input()                         #调用ATM机取款机操作函数
print("="*50,"\n")
